package com.leinao.team.dao;

import com.leinao.commons.Response;
import com.leinao.team.dto.TeamCalculationDto;
import com.leinao.team.dto.TeamUserInfoDto;
import com.leinao.team.dto.TeamMemberDto;
import com.leinao.team.model.PaiTeamInfo;
import com.leinao.team.model.PaiTeamMember;
import com.leinao.team.dto.TeamCalculationRecentUsageDto;
import com.leinao.team.model.UserInfo;
import org.apache.ibatis.annotations.Param;
import com.leinao.team.dto.TeamListDto;
import org.springframework.stereotype.Repository;
import java.util.List;


/**
 * @Description: 团队Dao
 * @Auther: weiwei
 * @Date: 2019/4/23 13:29
 * @Version 1.0
 */
@Repository
public interface TeamMapper {
    /**
     * 功能描述: 获取团队列表
     * @param: userId 用户ID
     * @param: role 1为自己创建 0为加入团队
     * @return: List<TeamListDto> 团队list
     * @auther: huopengfei
     * @date: 2019/4/23 17:13
     */
    List<TeamListDto> getTeamList(@Param("userId")String userId, @Param("role")Integer role);
    /**
     * 功能描述: 获取团队列表
     * @param: userId 用户ID
     * @param: role 1为自己创建 0为加入团队
     * @return: List<TeamListDto> 团队list
     * @auther: huopengfei
     * @date: 2019/4/23 17:13
     */
    List<TeamListDto> getTeamListWithPower(@Param("userId")String userId);

    /**
     * @Description    获取团队近期算力使用情况
     * @param teamId    团队Id
     * @param endDay    获取算力使用情况的截至日期
     * @return     查询日期内的算力使用情况
     * @author:    weiwei
     * @Date:  2019/4/23 15:11
     */
    List<TeamCalculationRecentUsageDto> getTeamCalculationRecentUsage(@Param("teamId")Long teamId, @Param("endDay")String endDay);
    /**
     *
     * @Description: 创建团队
     * @param paiTeamInfo : 团队信息
     * @return: int
     * @Author: 曹阳
     * @date: 2019/4/23 17:10
     *
     **/
    int createPaiTeam(PaiTeamInfo paiTeamInfo);

    /**
     *
     * @Description: 添加管理员
     * @param paiTeamMember : 管理员信息
     * @return: int
     * @Author: 曹阳
     * @date: 2019/4/23 17:10
     *
     **/
    int addTeamAdmin(PaiTeamMember paiTeamMember);

    /**
     *
     * @Description: 通过用户ID获取用户加入团队的信息
     * @param userId : 用户ID
     * @return: java.util.List<com.leinao.team.model.PaiTeamMember>
     * @Author: 曹阳
     * @date: 2019/4/23 17:11
     *
     **/
    List<PaiTeamMember> getTeamMemberByUserId(String  userId);

    /**
     *
     * @Description:  添加团队成员
     * @param paiTeamMember : 团队成员信息
     * @return: int
     * @Author: 曹阳
     * @date: 2019/4/24 9:30
     *
     **/
    int addTeamMember(PaiTeamMember paiTeamMember);

    /**
     *
     * @Description: 更新团队成员有效状态
     * @param teamId : 团队ID
     * @param userId : 用户ID
     * @return: int
     * @Author: 曹阳
     * @date: 2019/4/26 16:03
     *
     **/
    int updateTeamMemberDel(@Param("teamId") Long teamId, @Param("userId") String userId);

    /**
     *
     * @Description: 通过管理员ID获取团队信息
     * @param adminId : 管理员ID
     * @return: com.leinao.team.model.PaiTeamInfo
     * @Author: 曹阳
     * @date: 2019/4/24 9:48
     *
     **/
    PaiTeamInfo getPaiTeamByAdminId(String  adminId);

    /**
     *
     * @Description: 通过用户ID获取加入团队的数量
     * @param userId : 用户ID
     * @return: java.lang.Integer
     * @Author: 曹阳
     * @date: 2019/4/24 10:04
     *
     **/
    int getTeamCountByUserId(String  userId);


/**
  * 功能描述：创建团队通知
  * @param teamId
  * @param notice
  * @Return:com.leinao.commons.Response<java.lang.String>
  * @Author:cuijianxin
  * @Date:2019/4/25 15:49
  */
     int updateNotice(@Param("teamId") Long teamId, @Param("notice") String notice);

    /**
      * 功能描述：用户算例使用状态
      * @param teamId
      * @param userId
      * @param powerStatus
      * @Return:com.leinao.commons.Response<java.lang.String>
      * @Author:cuijianxin
      * @Date:2019/4/25 15:49
      */
    int updatePowerstatus(@Param("teamId") Long teamId, @Param("userId") String userId,@Param("powerStatus") String powerStatus);

    /**
     * 功能描述: 获取团队详情
     * @param: id 团队ID
     * @return:
     * @auther: huopengfei
     * @date: 2019/4/24 14:03
     */
    PaiTeamInfo getTeamDetail(@Param("id") Long id);
    /**
     * 功能描述: 校验是否为该团队成员
     * @param: id 团队ID
     * @return:
     * @auther: huopengfei
     * @date: 2019/4/24 14:03
     */
    String getTeamMemberOrNot(@Param("teamId") Long teamId,@Param("userId")String userId);

    /**
      * @Description  查询团队用户的算力使用情况
      * @param teamId   团队Id
      * @return
      * @author:    weiwei
      * @Date:  2019/4/25 10:50
      */
    List<TeamUserInfoDto> getTeamUserCalculationRecentUsage(@Param("teamId") Long teamId);

    /**
     * 功能描述: 获取团队成员信息
     * @param: teamId :团队ID
     * @param: startNum : 起始行数
     * @param: pageSize: 每页行数
     * @return:
     * @auther: huopengfei
     * @date: 2019/4/24 16:05
     */
    List<TeamMemberDto> getMemberDetail(@Param("teamId")Long teamId, @Param("startNum")int startNum, @Param("pageSize")int pageSize);

    /**
     *
     * @Description:  获取用户信息接口
     * @param key : 用户邮箱或用户ID
     * @return: java.util.Map<java.lang.String,java.lang.String>
     * @Author: 曹阳
     * @date: 2019/4/24 15:59
     *
     **/
    UserInfo getUserInfoByEmailOrUserId(String key);

    /**
     *
     * @Description: 通过邮箱获取多个用户信息
     * @param email : 用户邮箱
     * @return: java.util.List<com.leinao.team.model.UserInfo>
     * @Author: 曹阳
     * @date: 2019/4/26 11:43
     *
     **/
    List<UserInfo> getUserInfoByEmails(String[] email);

    /**
     *
     * @Description: 验证用户是否已加入团队
     * @param userId : 用户ID
     * @param teamId : 团队ID
     * @return: com.leinao.team.model.PaiTeamMember
     * @Author: 曹阳
     * @date: 2019/4/24 16:00
     *
     **/
    PaiTeamMember getTeamMember(@Param("userId") String userId, @Param("teamId") Long teamId);

    /**
      * 功能描述: 删除成员
      * @param userId
      * @param teamId
      * @Return:void
      * @Author:HuoPengfei
      * @Date:2019/4/25 14:03
      */
    int deleteMember(@Param("userId") String userId, @Param("teamId") Long teamId);
    /**
      * 功能描述: 校验队长身份
      * @param adminId
      * @param teamId
      * @Return:java.lang.String
      * @Author:HuoPengfei
      * @Date:2019/4/25 14:35
      */
    String getUserIsLeader(@Param("adminId") String adminId, @Param("teamId") Long teamId);

    /**
      * 功能描述: 退出团队
      * @param userId
      * @param teamId
      * @Return:int
      * @Author:HuoPengfei
      * @Date:2019/4/25 15:09
      */
    int quitTeam(@Param("userId") String userId, @Param("teamId") Long teamId);

    /**
      * 功能描述: 修改团队介绍
      * @param introduction 团队介绍
      * @param teamId 团队ID
      * @Return:int
      * @Author:HuoPengfei
      * @Date:2019/4/25 15:36
      */
    int updateTeamIntro(@Param("introduction")String introduction,@Param("teamId")Long teamId);

    /**
     * @Description  团队剩余算力和已使用算力
     * @param teamId  团队Id
     * @return
     * @author:    weiwei
     * @Date:  2019/4/25 15:36
     */
    TeamCalculationDto getTeamCalculation(@Param("teamId") Long teamId);

    /**
     * 功能描述: 解散团队
     * @param adminId
     * @param teamId
     * @Return:com.leinao.team.dto.TeamCalculationDto
     * @Author:HuoPengfei
     * @Date:2019/4/25 17:42
     */
    int disbandTeam(@Param("adminId") String adminId,@Param("teamId")Long teamId);

    /**
      * 功能描述: 删除成员
      * @param teamId
      * @Return:int
      * @Author:HuoPengfei
      * @Date:2019/4/29 10:55
      */
    int disbandMember(@Param("teamId")Long teamId);

    /**
      * @Description    获取团队成员数量
      * @param teamId   团队Id
      * @return
      * @author:    weiwei
      * @Date:  2019/4/26 15:36
      */
    Long getTeamMemberCount(@Param("teamId")Long teamId);

    /**
      * 功能描述: 校验是否已经创建过团队
      * @param userId
      * @Return:java.lang.String
      * @Author:HuoPengfei
      * @Date:2019/4/29 13:34
      */
    String getCreateTeamOrNot(@Param("userId")String userId);
}
